home *** CD-ROM | disk | FTP | other *** search
/ BCI NET 2 / BCI NET 2.iso / archives / programming / languages / fpl-v115.lha / FPL / src / compile.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-03-17  |  7.0 KB  |  351 lines

  1. /******************************************************************************
  2.  *                        FREXX PROGRAMMING LANGUAGE                          *
  3.  ******************************************************************************
  4.  
  5.  compile.c
  6.  
  7.  All compiling functions.
  8.  
  9.  *****************************************************************************/
  10.  
  11. /************************************************************************
  12.  *                                                                      *
  13.  * fpl.library - A run time library interpreting script langauge.       *
  14.  * Copyright (C) 1992, 1993 FrexxWare                                   *
  15.  * Author: Daniel Stenberg                                              *
  16.  *                                                                      *
  17.  * This program is free software; you can redistribute it and/or modify *
  18.  * it under the terms of the GNU General Public License as published by *
  19.  * the Free Software Foundation; either version 2, or (at your option)  *
  20.  * any later version.                                                   *
  21.  *                                                                      *
  22.  * This program is distributed in the hope that it will be useful,      *
  23.  * but WITHOUT ANY WARRANTY; without even the implied warranty of       *
  24.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the        *
  25.  * GNU General Public License for more details.                         *
  26.  *                                                                      *
  27.  * You should have received a copy of the GNU General Public License    *
  28.  * along with this program; if not, write to the Free Software          *
  29.  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.            *
  30.  *                                                                      *
  31.  * Daniel Stenberg                                                      *
  32.  * Birger Jarlsgatan 93b 3tr                                            *
  33.  * 113 56 Stockholm                                                     *
  34.  * Sweden                                                               *
  35.  *                                                                      *
  36.  * FidoNet 2:201/328 email: dast@sth.frontec.se                         *
  37.  *                                                                      *
  38.  ************************************************************************/
  39.  
  40. #include "script.h"
  41. #ifdef COMPILE_AVAIL
  42.  
  43. ReturnCode REGARG GetString(struct Data *scr, char *string)
  44. {
  45.   /*
  46.    * This function receives a parsed constant string.
  47.    */
  48.  
  49.   struct fplArgument *pass;
  50.   ReturnCode ret;
  51.   GETMEM(pass, sizeof(struct fplArgument));
  52.  
  53.   pass->ID=FPL_COMPILE;
  54.   pass->funcdata = (void *)string;
  55.   pass->format = "S";
  56.  
  57.   CALL(InterfaceCall(scr, pass, scr->function));
  58.  
  59.   FREE(pass);
  60.  
  61.   return FPL_OK;
  62. }
  63.  
  64. ReturnCode REGARG GetSymbol(struct Data *scr, char *string)
  65. {
  66.   /*
  67.    * This function receives a parsed symbol name.
  68.    */
  69.  
  70.   ReturnCode ret;
  71.   struct fplArgument *pass;
  72.   GETMEM(pass, sizeof(struct fplArgument));
  73.  
  74.   pass->ID=FPL_COMPILE;
  75.   pass->funcdata = (void *)string;
  76.   pass->format = "S";
  77.  
  78.   CALL(InterfaceCall(scr, pass, scr->function));
  79.  
  80.   FREE(pass);
  81.  
  82.   return FPL_OK;
  83. }
  84.  
  85. ReturnCode REGARG GetInt(struct Data *scr, int value)
  86. {
  87.   /*
  88.    * This function receives a parsed symbol name.
  89.    */
  90.  
  91.   ReturnCode ret;
  92.   struct fplArgument *pass;
  93.   GETMEM(pass, sizeof(struct fplArgument));
  94.  
  95.   pass->ID=FPL_COMPILE;
  96.   pass->funcdata = (void *)value;
  97.   pass->format = "I";
  98.  
  99.   CALL(InterfaceCall(scr, pass, scr->function));
  100.  
  101.   FREE(pass);
  102.  
  103.   return FPL_OK;
  104. }
  105.  
  106. ReturnCode REGARG GetSpecial(struct Data *scr, CompileCode what)
  107. {
  108.   /*
  109.    * This function receives a parsed symbol name.
  110.    */
  111.  
  112.   ReturnCode ret;
  113.   struct fplArgument *pass;
  114.   char *output;
  115.   GETMEM(pass, sizeof(struct fplArgument));
  116.  
  117.   switch(what) {
  118.   case COMP_ERROR:
  119.     output = "The compiler called a function that it shouldn't!\n";
  120.     break;
  121.  
  122.   case COMP_START_OF_BLOCK:
  123.     output = "{";
  124.     break;
  125.  
  126.   case COMP_END_OF_BLOCK:
  127.     output = "}";
  128.     break;
  129.  
  130.   case COMP_END_OF_PROGRAM:
  131.     output = "<end of program>";
  132.     break;
  133.  
  134.   case COMP_SEMICOLON:
  135.     output = ";";
  136.     break;
  137.  
  138.   case COMP_START_OF_CODE:
  139.     output = "<start of code>";
  140.     break;
  141.  
  142.   case COMP_ARRAY:
  143.     output = "<array>";
  144.     break;
  145.  
  146.   case COMP_COMMA:
  147.     output = ",";
  148.     break;
  149.  
  150.   case COMP_POSTINC:
  151.     output = "++";
  152.     break;
  153.  
  154.   case COMP_PREINC:
  155.     output =" ++";
  156.     break;
  157.  
  158.   case COMP_POSTDEC:
  159.     output = "--";
  160.     break;
  161.  
  162.   case COMP_PREDEC:
  163.     output = "--";
  164.     break;
  165.  
  166.   case COMP_START_OF_PARAMETERS:
  167.     output = "<start of parameters>";
  168.     break;
  169.  
  170.   case COMP_END_OF_PARAMETERS:
  171.     output = "<end of parameters>";
  172.     break;
  173.  
  174.   case COMP_START_OF_EXPR:
  175.     output = "<start of expression>";
  176.     break;
  177.  
  178.   case COMP_END_OF_EXPR:
  179.     output = "<end of expression>";
  180.     break;
  181.  
  182.   case COMP_NOT:
  183.     output ="!";
  184.     break;
  185.  
  186.   case COMP_1COMPL:
  187.     output ="~";
  188.     break;
  189.  
  190.   case COMP_PLUS:
  191.     output = "+";
  192.     break;
  193.  
  194.   case COMP_MINUS:
  195.     output = "-";
  196.     break;
  197.  
  198.   case COMP_EQUAL:
  199.     output = "==";
  200.     break;
  201.  
  202.   case COMP_LOGAND:
  203.     output = "&&";
  204.     break;
  205.  
  206.   case COMP_BINAND:
  207.     output = "&";
  208.     break;
  209.  
  210.   case COMP_LOGOR:
  211.     output = "||";
  212.     break;
  213.  
  214.   case COMP_BINOR:
  215.     output = "|";
  216.     break;
  217.  
  218.   case COMP_BINXOR:
  219.     output = "^";
  220.     break;
  221.  
  222.   case COMP_COND1:
  223.     output = "?";
  224.     break;
  225.  
  226.   case COMP_COND2:
  227.     output = ":";
  228.     break;
  229.  
  230.   case COMP_MULTIPLY:
  231.     output = "*";
  232.     break;
  233.  
  234.   case COMP_REMAIN:
  235.     output = "%";
  236.     break;
  237.  
  238.   case COMP_LESSEQ:
  239.     output = "<=";
  240.     break;
  241.  
  242.   case COMP_SHIFTL:
  243.     output = "<<";
  244.     break;
  245.  
  246.   case COMP_LESS:
  247.     output = "<";
  248.     break;
  249.  
  250.   case COMP_GRETEQ:
  251.     output = ">=";
  252.     break;
  253.  
  254.   case COMP_SHIFTR:
  255.     output = ">>";
  256.     break;
  257.  
  258.   case COMP_GRET:
  259.     output = ">";
  260.     break;
  261.  
  262.   case COMP_NOTEQUAL:
  263.     output = "!=";
  264.     break;
  265.  
  266.   case COMP_START_OF_ARRAYINFO:
  267.     output = "<start of array info>";
  268.     break;
  269.  
  270.   case COMP_END_OF_ARRAYINFO:
  271.     output = "<end of array info>";
  272.     break;
  273.  
  274.   case COMP_VARIABLEREF:
  275.     output ="&";
  276.     break;
  277.  
  278.   case COMP_CMPPLUS:
  279.     output ="+=";
  280.     break;
  281.  
  282.   case COMP_CMPMINUS:
  283.     output ="-=";
  284.     break;
  285.  
  286.   case COMP_CMPMUL:
  287.     output ="*=";
  288.     break;
  289.  
  290.   case COMP_CMPDIV:
  291.     output ="/=";
  292.     break;
  293.  
  294.   case COMP_CMPAND:
  295.     output ="&=";
  296.     break;
  297.  
  298.   case COMP_CMPOR:
  299.     output ="|=";
  300.     break;
  301.  
  302.   case COMP_CMPREMAIN:
  303.     output ="%=";
  304.     break;
  305.  
  306.   case COMP_CMPXOR:
  307.     output ="^=";
  308.     break;
  309.  
  310.   case COMP_CMPSHIFTL:
  311.     output ="<<=";
  312.     break;
  313.  
  314.   case COMP_CMPSHIFTR:
  315.     output =">>=";
  316.     break;
  317.  
  318.   case COMP_ASSIGN:
  319.     output ="=";
  320.     break;
  321.  
  322.   case COMP_NO_PARAMETER:
  323.     output ="<no parameter>";
  324.     break;
  325.  
  326.   case COMP_INT_PARAMETER:
  327.     output ="<int parameter>";
  328.     break;
  329.  
  330.   case COMP_STRING_PARAMETER:
  331.     output ="<string parameter>";
  332.     break;
  333.  
  334.   default:
  335.     break;
  336.   }
  337.  
  338.   pass->ID=FPL_COMPILE;
  339.   pass->funcdata = (void *)output;
  340.   pass->format = "S";
  341.  
  342.   CALL(InterfaceCall(scr, pass, scr->function));
  343.  
  344.   FREE(pass);
  345.  
  346.   return FPL_OK;
  347. }
  348.  
  349. #endif /* COMPILE_AVAIL */
  350.  
  351.